<?php

declare(strict_types=1);

namespace app\customer\service;

use app\common\ImageHandle;

class Upload
{

    protected $imageHandler;

    public function __construct()
    {
        $this->imageHandler = new ImageHandle();
    }
    /**
     * @describe
     * @author: Bobo
     * @date: 2024-06-28 11:38:15 
     * @param [type] @required
     * @return Renderable
     */
    public function upload($base64String)
    {
        // 找到逗号分隔符，它之前的部分包括了数据类型和编码信息
        $commaPosition = strpos($base64String, ',');
        // 获取逗号之前的部分，即包含数据类型的部分
        $dataTypeSection = substr($base64String, 0, $commaPosition);
        // 找到逗号分隔符，它之前的部分包括了数据类型和编码信息
        $commaPosition = strpos($base64String, ',');
        // 获取逗号之前的部分，即包含数据类型的部分
        $dataTypeSection = substr($base64String, 0, $commaPosition);

        // 使用正则表达式匹配 MIME 类型
        if (preg_match('/^data:\s*([^;]+);base64/i', $dataTypeSection, $matches)) {
            $mimeType = $matches[1];
            // $fileData = $this->decodeBase64File($base64String, $commaPosition);
            switch ($mimeType) {
                case 'image/jpeg': // 处理 JPEG 图像 
                case 'image/png':  // 处理 PNG 图像

                    $result = $this->imageHandler->uploadImgByBase64($base64String);

                    break;
                case 'application/pdf':
                    $result = $this->imageHandler->uploadImgByBase64($base64String);

                    break;
                case 'application/msword':
                    // 处理 Word 文档（旧版 .doc）
                    break;
                case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
                    // 处理 Word 文档（.docx）
                    break;
                case 'application/vnd.ms-excel':
                    // 处理 Excel 文档（旧版 .xls）
                    break;
                case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
                    // 处理 Excel 文档（.xlsx）
                    break;
                case 'text/plain':
                    // 处理纯文本文件
                    break;
                    // 更多的 MIME 类型可以继续添加...
                default:
                    $result = [
                        'url' => '',
                        'result' => false,
                        'message' => '上传失败，不支持的文件类型'
                    ];
                    break;
            }
            if ($result['result']) {
                return ['code' => 0, 'message' => '上传成功', 'data' => $result['url']];
            } else {
                return ['code' => 1, 'message' => $result['message']];
            }
        } else {
            return ['code' => 1, 'message' => '上传失败，请检查上传文件类型'];
        }
    }

    /**
     * @describe
     * @author: Bobo
     * @date: 2024-06-28 12:03:04 
     * @param [type] @required
     * @return Renderable
     */
    public function decodeBase64File($base64String, $commaPosition)
    {
        $encodedFileData = substr($base64String, $commaPosition + 1);
        $fileData = base64_decode($encodedFileData);
        return $fileData;
    }
}
